package com.hmkj.core.service.user;

import com.hmkj.common.entity.dtgrid.DtGrid;
import com.hmkj.core.exception.DtGridException;
import com.hmkj.core.model.user.UserModel;
import com.hmkj.core.po.user.User;
import com.hmkj.core.service.base.GenericService;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * 用户表业务相关Service接口<br>
 *
 * @author donfy
 * @ClassName: UserService
 * @date 2017-08-25 04:51:01
 */
public interface UserService extends GenericService<Integer, User> {

    /**
     * 注册接口
     *
     * @param model 页面传入参数
     * @return 完成注册用户
     */
    void doRegister(UserModel model);

    /**
     * 查询第 N 级的好友人数
     *
     * @param code  用户节点标识 如果为空 则查询第一级用户数量
     * @param level 查询的层级（层级为0则查询所有层级的伙伴总数）
     * @return
     */
    Integer countPartnerByLevel(String code, int level);

    /**
     * 重写QueryService中的方法对应独立需求
     *
     * @param dtGridPager
     * @return
     * @throws DtGridException
     */
    DtGrid getDtGridForFriendsList(String dtGridPager) throws DtGridException;


    long investorSum() throws Exception;

    /**
     * 修改用户邮箱，更改UserIdentify邮箱绑定状态
     *
     * @param user
     * @param email
     */
    void updateUserToBandingMailbox(User user, String email);

    /**
     * 导出
     *
     * @param dtGridPager
     * @return
     * @throws DtGridException
     */
    DtGrid getDtGridListExport(String dtGridPager) throws DtGridException;

    /**
     * 根据邀请码查询用户
     *
     * @param inviteCode 邀请码
     * @return
     */
    User selectByInviteCode(String inviteCode);

    /**
     * 修改用户手机号
     *
     * @param userId             用户id
     * @param newUserMobilePhone 新手机号
     */
    void updateUserMobile(Integer userId, String newUserMobilePhone);

    /**
     * 实名认证
     *
     * @param user 用户
     */
    User realName(User user);

    /**
     * 绑定支付宝账户
     *
     * @param user 用户
     */
    User bindAlipay(User user);

    /**
     * 前台用户登录
     *
     * @param model
     * @return
     */
    User doLogin(UserModel model, HttpServletRequest request);


    long inviteNumber(Integer userId);

    /**
     * 后台统计用户来源
     *
     * @param dtGrid
     * @return
     * @throws DtGridException
     */
    DtGrid getDtGridModelList(DtGrid dtGrid) throws DtGridException;

    List<String> getSource();

    /**
     * 用户每日签到
     *
     * @param id
     */
    void doSign(Integer id);

    /**
     *  用户下线查询
     */
    List<User> selectOffline(Integer parentId);

    /**
     * 后台统计用户来源导出
     *
     * @param dtGridPager
     * @return
     * @throws DtGridException
     */
    DtGrid getDtGridModelListExport(String dtGridPager) throws DtGridException;
}
